package evemanutool.data.cache;
import java.util.ArrayList;
import java.util.Date;
import com.beimin.eveapi.shared.wallet.RefType;
import com.beimin.eveapi.shared.wallet.journal.ApiJournalEntry;
import evemanutool.constants.DBConstants;
import evemanutool.utils.file.Parsable;
import evemanutool.utils.file.ParseTools;
public class WalletJournalEntry implements Parsable<WalletJournalEntry>, Comparable<WalletJournalEntry>, DBConstants {
private long refId;
private Date date;
private double amount;
private double balance;
private CharacterEntry sender;
private CharacterEntry receiver;
private RefType type;
private String comment;
public WalletJournalEntry() {}
public WalletJournalEntry(long refId, Date date, double amount,
double balance, CharacterEntry sender, CharacterEntry receiver, RefType type,
String comment) {
this.refId = refId;
this.date = date;
this.amount = amount;
this.balance = balance;
this.sender = sender;
this.receiver = receiver;
this.type = type;
this.comment = comment;
}
public WalletJournalEntry(ApiJournalEntry e) {
refId = e.getRefID();
date = e.getDate();
amount = e.getAmount();
balance = e.getBalance();
sender = new CharacterEntry(e.getOwnerID1(), e.getOwnerName1());
receiver = new CharacterEntry(e.getOwnerID2(), e.getOwnerName2());
type = e.getRefType();
comment = e.getReason();
}
public long getRefId() {
return refId;
}
public void setRefId(long refID) {
this.refId = refID;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public CharacterEntry getSender() {
return sender;
}
public void setSender(CharacterEntry sender) {
this.sender = sender;
}
public CharacterEntry getReceiver() {
return receiver;
}
public void setReceiver(CharacterEntry receiver) {
this.receiver = receiver;
}
public RefType getType() {
return type;
}
public void setType(RefType type) {
this.type = type;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof WalletJournalEntry) {
return getRefId() == ((WalletJournalEntry) obj).getRefId();
}
return false;
}
@Override
public int hashCode() {
return (int) getRefId();
}
@Override
public int compareTo(WalletJournalEntry o) {
//Negate standard sort order => Latest first.
return -Long.compare(getDate().getTime(), o.getDate().getTime());
}
@Override
public String toParseString() {
ArrayList<Object> ss = new ArrayList<>();
ss.add(getRefId()); ss.add(getDate().getTime()); ss.add(getAmount());
ss.add(getBalance()); ss.add(getSender().toParseString());
ss.add(getReceiver().toParseString()); ss.add(getType().getId());
ss.add(getComment());
return ParseTools.join(ss, LEVEL2_DELIM);
}
@Override
public WalletJournalEntry fromParseString(String s) {
String[] ss = s.split(LEVEL2_DELIM, -1);
setRefId(Long.parseLong(ss[0]));
setDate(new Date(Long.parseLong(ss[1])));
setAmount(Double.parseDouble(ss[2]));
setBalance(Double.parseDouble(ss[3]));
setSender(new CharacterEntry().fromParseString(ss[4]));
setReceiver(new CharacterEntry().fromParseString(ss[5]));
setType(RefType.forID(Integer.parseInt(ss[6])));
setComment(ss[7]);
return this;
}
}